package com.mgm.advertisement.service;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

import com.mgm.page.DataGrid;
import com.mgm.pojo.Advertisement;
import com.mgm.result.IMessage;
import com.mgm.result.IResult;

/**
 * 
 * @ClassName: AdvertisementService 
 * @Description: TODO(...) 
 * @author Andy Zhang
 * @date 2018年6月28日 下午8:52:25 
 *
 */
public interface AdvertisementService {

	// 增加广告
	IMessage addAdvertisement(Advertisement advertiser);
	
	//根据广告主id和广告id获取广告信息
	IResult<Advertisement> selectByKeys(Integer adId, Integer id);

	// 删除广告
	IMessage deleteAdvertisement(Advertisement advertiser);
	
	// 删除广告
	IMessage deleteAdvertisement(Integer adId, Integer id);

	// 批量删除广告
	IMessage deleteById(List<Integer> ids);

	// 修改广告
	IMessage updateAdvertisement(Advertisement advertiser);

	// 是否启用广告
	IMessage isEnabled(Integer id, Boolean enabled);
	
	// 修改广告溢价
	IMessage modifyPremium(Integer id, Integer premium);
	
	// 还原广告主溢价
	IMessage modifyInitialPremium(Integer id);
	
	// 修改Cap
	IMessage modifyCaps(Integer id, BigDecimal totalCap, BigDecimal dailyCap);
	
	// 还原Cap (默认为空，不是=0)
	IMessage modifyInitialCaps(Integer id);

	// 根据ID获取广告
	Advertisement selectById(Integer id);

	// 查询开启的广告
	List<Advertisement> findAllByEnabled();

	// 分页查询
	DataGrid findAll(Map<String, String> param, Integer pageNum, Integer pageSize);

	// 根据广告名查询
	List<Advertisement> findByName(String name);
	
	/**
	 * 批量插入
	 * @Title: insertBatch   
	 * @Description: TODO(...)   
	 * @param: @param list
	 * @param: @return      
	 * @return: int      
	 * @throws
	 */
	int insertBatch(List<Advertisement> list);
	
	/**
	 * 批量更新
	 * @Title: updateBatch   
	 * @Description: TODO(...)   
	 * @param: @param list
	 * @param: @return      
	 * @return: int      
	 * @throws
	 */
	int updateBatch(List<Advertisement> list);
	
	//根据广告主Id和相应的offerId获取广告
	List<Advertisement> findByAdvIdAndOldOfferId(Integer advId, List<String> oldOfferIds);
	
	//根据offerId获取广告
	Advertisement findByOfferId(String offerId);
	
	/**
	 * 更新offer状态及计数器
	 * @Title: updateOfferByAdvIdAndEnabledAndNotInOfferIds   
	 * @Description: 拉取offer的时，排除在外的offer要更新
	 * 其“开启”状态为“关闭”，并更新计数器字段
	 * @param: @param advId
	 * @param: @param oldOfferIds
	 * @param: @return      
	 * @return: int      
	 * @throws
	 */
	int updateOfferByAdvIdAndEnabledAndNotInOfferIds(Integer advId, List<String> oldOfferIds);

}
